Gerenciador de Lista de Tarefas


Gerado inicialmente pelo chatgpt e ajustado pelo instrutor.

Prompt Utilizado: Sugira para estudantes de programação um projeto de back end do tipo todo-list que possa ser desenvolvido para compor um portifolio. Crie uma extensa explicação das funcionalidades, modelo de dados e demais informações relevantes para que o desenvolvedor saiba o que implementar.

Descrição geral:

Este projeto consiste em desenvolver um sistema backend no formato API RESTful, ou pacote com classes onde os usuários poderão criar, gerenciar, organizar e acompanhar tarefas. O sistema deve permitir CRUD completo, filtros, autenticação (opcional, mas recomendado) e boas práticas de API.

Objetivos principais do projeto

Esta API serve para demonstrar domínio de:

  • Criação de endpoints REST

  • Organização de código backend (MVC, Services, Controllers)

  • Persistência de dados em banco de dados

  • Tratamento de erros

  • Validações

  • Autenticação com JWT

  • Operações CRUD reais

  • Paginação e filtros

  • Documentação


Modelo de Dados Sugerido

Tabela: tarefa


Campo Tipo Descrição
id inteiro Identificador único
titulo string Título da tarefa
descricao string (opcional) Detalhes da tarefa
completada boolean Se a tarefa está concluída
prioridade enum prioridade (baixa, média, alta)
data _limite date (opcional) Data limite
data_criacao datetime Data de criação
data_ultima_atualizacao datetime Data da última atualização
id_usuario inteiro (Opcional) Relacionamento com usuário caso queira que o sistema seja multi usuário


Esse modelo pode crescer conforme a versão do projeto.


Explicação Completa das Funcionalidades

A seguir, cada funcionalidade é explicada em detalhes, com foco tanto no valor para o usuário quanto na implementação no backend.


1️ - Criar nova tarefa (Create – POST /tasks)

O que deve acontecer

O usuário envia para a API um título e, opcionalmente, descrição, prioridade e data limite.
A API:

  • Valida os dados.

  • Cria o registro no banco.

  • Retorna a tarefa criada com o ID gerado.

Pontos importantes:

  • O título deve ser obrigatório.

  • prioridade deve aceitar apenas valores válidos (ex: 1,2,3 ou “baixa/média/alta”).

  • data_limite deve ser uma data válida e não pode ser no passado (opcional).

  • A tarefa deve iniciar com completada = false.

Validações comuns:

  • título vazio → erro 400

  • prioridade inválida → erro 422

  • data inválida → erro 422


2 - Listar todas as tarefas (Read – GET /tasks)

O que deve acontecer

A API retorna uma lista de tarefas.
Aqui entram pontos importantes de qualidade:

Filtros opcionais:

  • completada=true/false → listar por status

  • prioridade=alta → filtrar por prioridade

  • data_limite=2025-01-10 → filtrar por data limite

  • busca=palavra → buscar por título ou descrição

Paginação:

  • ?page=1

  • ?limit=10

A API deve retornar:

{
  "page": 1,
  "total_pages": 10,
  "total_items": 94,
  "items": [ ... ]
}



3️ - Buscar uma tarefa específica (GET /tasks/:id)

O que deve acontecer

Retorna os dados de uma tarefa pelo ID.

Tratamento de erros:

  • ID inválido → erro 400

  • Tarefa não encontrada → erro 404


4️ - Atualizar uma tarefa (PUT ou PATCH /tasks/:id)

Tipos de atualização:

  • PUT → atualiza todos os campos

  • PATCH → atualiza apenas os enviados

Permite alterar:

  • título

  • descrição

  • prioridade

  • completada(true/false)

  • data_limite

Regras importantes:

  • Se o usuário tentar marcar como concluída e já está concluída, retornar sucesso da mesma forma → idempotência

  • Atualizar data_ultima_atualizacao automaticamente


5️ - Excluir uma tarefa (DELETE /tasks/:id)

Deve:

  • Verificar se a tarefa existe

  • Excluir permanentemente

  • Retornar 204 sem body

Alternativa:

Implementar exclusão lógica:

  • adicionar campo excluido = true no banco de dados

  • remover só logicamente

  • excluir fisicamente apenas via processo futuro



6️ - Marcar tarefa como concluída (PATCH /tasks/:id/complete)

Funcionalidade específica muito comum em apps de tarefas.

O que faz:

  • Define completada = true

  • Registra a data de conclusão ( opcional )

  • Atualiza data_ultima_atualizacao

Boas práticas:

  • Se já estiver concluída, retornar apenas o status atual sem erro

  • Retornar a tarefa atualizada


7️ - Desmarcar tarefa como concluída (PATCH /tasks/:id/uncomplete)

O que faz:

  • completed = false

  • remove data de conclusão

Mostra compreensão de estados da aplicação.


8️ - Definir prioridade da tarefa (PATCH /tasks/:id/priority)

Exemplo de corpo:

{ "prioridade": "alta" }

Regras:

  • Aceitar somente valores pré-definidos

  • Retornar erro caso seja inválido

Implementar isso mostra domínio de validações customizadas.


9️ - Autenticação (Opcional mas muito recomendada)

Adicionar autenticação dá valor enorme ao portfólio.

O sistema deve permitir:

  • cadastro de usuário (POST /users)

  • login (POST /auth/login)

  • gerar token JWT

  • rotas protegidas

Cada tarefa pertence a um usuário

  • tasks.user_id = id do usuário logado

  • GET /tasks retorna só as tarefas do usuário

Diferencial:

Implementar Refresh Token + Logout.


Documentação da API (Swagger ou Postman)

Recrutadores valorizam muito.

A documentação deve conter:

  • Descrição de cada rota

  • Parâmetros

  • Exemplo de entrada

  • Exemplo de saída

  • Códigos de erro


11 - Tratamento global de erros

Outro grande diferencial.

A API deve retornar:

  • 400 → erro do usuário

  • 401 → não autenticado

  • 403 → proibido

  • 404 → não encontrado

  • 422 → validação

  • 500 → erro interno

Com formato:

{ "error": "ValidationError", "message": "Title is required" }


12 - Logs e auditoria

Pontuação extra em qualquer portfólio.

Incluir:

  • logs de requisição (method, url, tempo de resposta)

  • logs de erro

  • logs de autenticação (login, logout)


13 - Testes automatizados (opcional mas deixa excelente)

Testar:

  • criação de tarefa

  • atualização

  • filtros

  • autenticação

  • erros 404

Pode usar Jest, JUnit, PyTest etc.


Funcionalidades Extras Para Turbinar a API

Etiquetas (tags)

Cada tarefa pode ter uma ou várias tags.

Tarefas recorrentes

  • diária

  • semanal

  • mensal

Notificações (simuladas)

Enviar email quando a data estiver próxima.

Arquivamento

Mover tarefas antigas para um “arquivo”.


Dicas para o portfólio ficar realmente forte

- Sempre escreva README completo (objetivo, rotas, como rodar)
- Use migrations (Sequelize, Prisma, Hibernate, etc.)
- Utilize rotas REST bem definidas
- Testes automatizados (Jest, JUnit, PyTest…)
- Docker para subir o ambiente
- Demonstre arquitetura (MVC, Services, Repository etc.)
- Coloque link para documentação (Swagger / Postman)



Por que este projeto é muito forte para portfólio?

Porque ele demonstra:

  • domínio de CRUD completo

  • lógica de negócio

  • filtros e paginação

  • autenticação JWT

  • validações robustas

  • boas práticas REST

  • documentação

  • testes

  • arquitetura clara

  • manipulação de datas

  • tratamento de erros